package fr.charlott.core.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import fr.charlott.core.repository.CategorieJpaRepository;
import fr.charlott.core.repository.model.Categorie;
import fr.charlott.core.service.CategorieService;

@Service("coreCategorieService")
public class CategorieServiceImpl implements CategorieService {

	private CategorieJpaRepository categorieJpaRepository;

	public CategorieServiceImpl() {
		super();
	}

	@Autowired(required = true)
	public CategorieServiceImpl(CategorieJpaRepository categorieJpaRepository) {
		this();
		this.categorieJpaRepository = categorieJpaRepository;
	}

	@Override
	@Transactional(readOnly = true)
	public Categorie chargerParId(Long id) {
		return categorieJpaRepository.findOne(id);
	}
	
	@Override
	@Transactional(readOnly = true)
	public Categorie chercherParNom(String nom) {
		return categorieJpaRepository.findByNom(nom);
	}
	
	@Override
	@Transactional(readOnly = true)
	public List<Categorie> chargerToutesLesCategories() {
		return categorieJpaRepository.findAll();
	}
	
	@Override
	@Transactional
	public void ajouterCategorie(Categorie categorie) {
		Categorie categorieExist = chercherParNom(categorie.getNom());
		if (categorieExist == null) {
			categorieJpaRepository.saveAndFlush(categorie);
		}
	}
	
	@Override
	@Transactional
	public void supprimerCategorie(Categorie categorie) {
		categorieJpaRepository.delete(categorie);
	}
	
	@Override
	@Transactional
	public void supprimerToutesLesCategories() {
		categorieJpaRepository.deleteAll();
	}


	// getters - setters

	/**
	 * @param categorieJpaRepository
	 *            the categorieJpaRepository to set
	 */
	public void setCategorieJpaRepository(CategorieJpaRepository categorieJpaRepository) {
		this.categorieJpaRepository = categorieJpaRepository;
	}

}
